/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo;

/** 
 * @author Jorge Murillo
 */

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.JOptionPane;

public class PedidoModelo {
        ConexionModelo conexion=new ConexionModelo();
	private transient Connection con;
	ResultSet rs;
        

//linkedlist clase de java para generar listas
//preparedstatement permite prepara el estado recibir la informacion de la base de datos
//rsultset el resultado
 public LinkedList consultaPedidoTabla(String consulta,int tipo)throws SQLException{
     if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

     //parametros consulta clientes, tipo: 1.Cedula 2.Nombre 3.Establecimiento
	LinkedList listaClie=new LinkedList();
	PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            if (consulta.equals(""))
  		pstmt=con.prepareStatement("select * from Pedido");
            else
                if (tipo==1)
                    pstmt=con.prepareStatement("select * from Pedido where consecutivo like '%"+ consulta + "%'");//probando

  		rs=pstmt.executeQuery();
  		while(rs.next()){
  			listaClie.add(Pedido.load(rs));
  		}

  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}

	return listaClie;
 }

/**
 * Inserto nuevo pedido
 * @param pedido
 * @throws SQLException
 */
 public void setNuevoPedido(Pedido pedido) throws SQLException {// insertar datos a la base de datos
       if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

        PreparedStatement pstmt=null;
        try{

                pstmt=con.prepareStatement("insert into pedido values(?,?,?,?,?)");
                pstmt.setString(1,  pedido.getConsecutivo());
                pstmt.setDate(2, pedido.getFecha());             
                pstmt.setBoolean(3,  pedido.isEstado());
		pstmt.setString(4,  pedido.getCodigoCliente());
                pstmt.setString(5,  pedido.getCodigoVendedor());
		pstmt.executeUpdate();

        }finally{
               if( pstmt!=null )
                  pstmt.close();
        }
    }

 /**
  *actualizar donde consulta cedula o codigo y dato es el valor a cambiar
  *
  */
  public void actualizarPedido(Pedido pedido,String consulta) throws SQLException {// insertar datos a la base de datos
        if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

        int estado=0;
        if(pedido.isEstado())
            estado=1;

        PreparedStatement pstmt=    null;
        try{

                pstmt=con.prepareStatement("update pedido set "
                        + "consecutivo='" + pedido.getConsecutivo() + "',"
                        + "fecha='" + pedido.getFecha() + "',"
                        + "estado='" + estado + "',"
                        //+ "estado='" + pedido.isEstado() + "',"
                        + "codigoCliente='" + pedido.getCodigoCliente() + "', "
                        + "codigoVendedor='" + pedido.getCodigoVendedor() + "'"
                        + " where consecutivo='" + consulta +"'");
		pstmt.executeUpdate();

        }finally{
               if( pstmt!=null )
                  pstmt.close();
        }
    }

  public Pedido consultaPedido(String consulta) throws SQLException{
     if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

      Pedido pedido=new Pedido();
      PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("select * from Pedido where consecutivo='"+ consulta + "'");//probando
            rs=pstmt.executeQuery();

            while(rs.next()){
                pedido.setConsecutivo(rs.getString(1));
                pedido.setFecha(rs.getDate(2));
                pedido.setEstado(rs.getBoolean(3));
                pedido.setCodigoCliente(rs.getString(4));
                pedido.setCodigoVendedor(rs.getString(5));
            }
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return pedido;
  }

   /**
  * Consultar cedula o codigo
  * @param nickname
  * @throws SQLException
  */
  public Pedido getPedido(String consecutivo) throws SQLException{
      if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

        Pedido pedido=new Pedido();
        PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("select * from Pedido where consecutivo='"+ consecutivo + "'");//probando
            rs=pstmt.executeQuery();

            while(rs.next()){
                pedido.setConsecutivo(rs.getString(1));
                pedido.setFecha(rs.getDate(2));
                pedido.setEstado(rs.getBoolean(3));
                pedido.setCodigoCliente(rs.getString(4));
                pedido.setCodigoVendedor(rs.getString(5));
            }
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return pedido;
  }

  /**
   * Obtiene el ultimo consecutivo o maximo consecutivo
   */
  public int getConsecutivo() throws SQLException{
     if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

       int consecutivo=0;
       PreparedStatement pstmt=null;
       ResultSet rs=null;
       try{
            consecutivo=10000000;
            //calculo el maximo consecutivo
            pstmt=con.prepareStatement("SELECT max(cast(consecutivo As SIGNED)) as consecutivo FROM pedido");
            rs=pstmt.executeQuery();

            while(rs.next()){
                if(rs.getInt(1)!=0)
                    consecutivo=rs.getInt(1);
            }
        }finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return consecutivo;
  }
}// fin clase model


